// controllers/userController.js

const bcrypt = require('bcrypt');
const userModel = require('../models/userModel');
// 在文件顶部引入 dotenv 配置
require('dotenv').config();
const jwt = require('jsonwebtoken');

// 获取 secretKey
const secretKey = process.env.JWT_SECRET_KEY;
if (!secretKey) {
  console.error('JWT_SECRET_KEY is not defined');
  process.exit(1); // 如果没有密钥，退出程序
}
// 注册控制器
exports.register = async (req, res) => {
  const { username, password } = req.body;

  try {
    // 首先检查用户名是否已经存在
    userModel.checkUsernameExists(username, async (err, exists) => {
      if (err) {
        console.error(err);
        return res.status(500).json({ error: 'Database error' });
      }

      if (exists) {
        // 用户名已经存在
        return res.status(400).json({ error: '用户已存在' });
      }

      // 用户名不存在，继续注册流程
      // 加密密码
      const hashedPassword = await bcrypt.hash(password, 10);

      // 使用模型方法将用户信息插入数据库
      userModel.createUser(username, hashedPassword, (err, result) => {
        if (err) {
          console.error(err);
          return res.status(500).json({ error: 'Database error' });
        }

        res.json({success: true, message: '注册成功' });
      });
    });
  } catch (error) {
    // 捕获bcrypt或其他异步错误
    res.status(500).json({ error: 'Server error' });
  }
};
// 登录控制器
exports.login = (req, res) => {
  const { username, password } = req.body;

  // 通过用户名查找用户
  userModel.getUserByUsername(username, (err, user) => {
    if (err) {
      console.error(err);
      return res.status(500).json({ error: 'Database error' });
    }

    if (!user) {
      // 用户不存在
      return res.status(400).json({ error: '用户不存在' });
    }

    // 验证密码
    bcrypt.compare(password, user.password, (err, isMatch) => {
      if (err) {
        console.error(err);
        return res.status(500).json({ error: 'Server error' });
      }

      if (!isMatch) {
        // 密码不匹配
        return res.status(400).json({ error: '密码错误' });
      }
       // 生成 JWT token
       const token = jwt.sign({ id: user.user_id, username: user.username }, secretKey, { expiresIn: '7d' });  // 7天有效

      // 登录成功
      res.json({ success: true,token, message: '登录成功', username: user.username,userId: user.user_id});
    });
  });
};
